The development of the EDVAC computer system of 1948 is often cited as the beginning of the computer era. Since that time, computer systems have evolved into extremely sophisticated devices, and computer systems may be found in many different settings. Computer systems typically include a combination of hardware (such as semiconductors, integrated circuits, programmable logic devices, programmable gate arrays, and circuit boards) and software, also known as computer programs. Years ago, computers were isolated devices that did not communicate with each other. But, today computers are often connected in networks, such as the Internet or World Wide Web, and a user at one computer, often called a client, may wish to access information at multiple other computers, often called servers, via a network.
Clients often wish to send requests or messages to applications that are distributed or clustered across multiple servers. Several different types of algorithms are currently used to choose which server receives which request. In a first example, a load-balancing algorithm distributes incoming requests to multiple servers, so that each server has roughly the same workload. In a second example, a temporary affinity algorithm routes all requests that are associated with a single transaction to the server where the transaction started. In a third example, a cached session-state algorithm routes requests from clients to the server where that client's state (e.g., a hypertext transport protocol state) is currently cached.
But, for online transaction processing (OLTP) applications, those three example algorithms may not result in good performance because OLTP applications often receive a wide variety of different types of requests, which no single algorithm handles expeditiously. For example, some OLTP requests are dependent on accessing a specific state, such as messages received for data relevant to a subset of the incoming requests. In another example, some types of OLTP applications require requests to be processed in order. Such applications are typically not possible to cluster, and they result in a single server hosting the application, which only scales vertically and also represents a single point of failure.
Without a better way to distribute requests across multiple servers, users will continue to suffer from degraded performance. Although the aforementioned problems have been described in the context of OLTP applications, any type of application may suffer from these problems.